package sofia.Persistencia.Managers;

import Principal.MainSofia;
import java.util.Iterator;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import javax.persistence.RollbackException;
import sofia.Persistencia.Entidades.ELogeo;

/**
 * Manager que comunica la capa de persisntecia (Entidad Logeo) y  la capa bean (UserBean)
 * @author root
 * @author JAPeTo = Jefferson Amado Peña Torres = 0748836
 */
public class MLogeo {

        @PersistenceUnit
        private EntityManagerFactory managerFactory;
        private EntityManager entityManager;
        private String idLogin;

        public MLogeo() {
                managerFactory = MainSofia.managerFactory;
                entityManager = managerFactory.createEntityManager();
        }

        /**
        * Este metodo se encarga de la persistencia en la entidad Informe
        * de un objeto Informe.
         * @param loginUsuario
         * @param contrasenia
         * @param tipoPerfil
         * @throws RollbackException
         * @throws EntityExistsException 
        */
        public void crearLogeo( final String loginUsuario , final String contrasenia , final String tipoPerfil ) throws RollbackException, EntityExistsException {
                entityManager.clear();
                ELogeo entidadLogeo = new ELogeo();
                entidadLogeo.setLoginId( loginUsuario );
                entidadLogeo.setContrasenia( contrasenia );
                entidadLogeo.setTipoPerfil( tipoPerfil );

                //persiste el objeto en la entidad
                EntityTransaction transaccion = entityManager.getTransaction();
                try {
                        transaccion.begin();
                        entityManager.persist( entidadLogeo );
                }
                catch (EntityExistsException ex) {
                        throw ex;
                }
                finally {
                        transaccion.commit();
                }
                entityManager.clear();
        }
        /**
         * Permite el acceso al fisioterapeuta
         * @param ParametroId
         * @param ParametroContraenia
         * @return <b>true</b> si es un usuario valido ,<b>false</b> si no lo es
         * @throws NoResultException 
         */
        public String permiteLogeo(String ParametroId,String ParametroContraenia)throws NoResultException{
            entityManager.clear();
            EntityTransaction transaccion = entityManager.getTransaction();
            transaccion.begin();
            Query query = entityManager.createQuery("SELECT log FROM ELogeo log WHERE log.loginId = :ParametroId AND log.contrasenia = :ParametroContraenia");
                query.setParameter("ParametroId", ParametroId);
                query.setParameter("ParametroContraenia", ParametroContraenia);
                query.setMaxResults(1);
                ELogeo user = (ELogeo) query.getSingleResult();
                    idLogin = user.getLoginId();
                    return user.getTipoPerfil();
        }
        public String getidLogin(){
               return idLogin;
        }
}
